Héritage numpy.ndarray est une décision architecturale de haut niveau utilisée pour créer des structures de données spécifiques au domaine qui encapsulent méta-données (comme les unités, les coordonnées ou les taux d'échantillonnage) en plus des données numériques brutes. Contrairement aux classes Python standards, les objets NumPy sont souvent créés sans appeler __init__.
Le trio d'initialisation
Les concepteurs doivent tenir compte de trois chemins d'instanciation distincts où le constructeur standard est contourné :
- Construction explicite : Utilisation du nom de la classe (gérée par
__new__). - Conversion de vue : Réinterpréter un tableau existant comme votre sous-classe.
- Nouveau à partir du modèle : Créer un tranche ou une copie d'une instance de sous-classe existante.
Le hook spécialisé __array_finalize__ est le point de convergence où les méta-données sont synchronisées entre ces chemins.
Fragilité comportementale
L'héritage crée un lien étroit avec l'API C de NumPy. Les opérations qui retournent des scalaires (par exemple, np.mean()) ont souvent "suppriment" l'identité de la sous-classe, revenant à un standard ndarray. La gestion des méta-données est donc un risque constant sauf si elle est soigneusement gérée via des transitions d'état.
isinstance(obj, np.ndarray). Sinon, Composition (en enveloppant un tableau) est plus sûr.